/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package im.filters;

import im.eventpackage.Predicate_old;
import im.eventpackage.EventUtils_old;
import java.util.StringTokenizer;
import im.subscriptionpackage.*;

/**
 *
 * @author Giovanni
 */
public class TopicEventFilter_old {



    public TopicEventFilter_old() {
    }
// modificare filterSubscription(evento,sub)

    public boolean filter(EventUtils_old ev, String keys) {
        boolean ret = true;

        StringTokenizer st = new StringTokenizer(keys);

        while (st.hasMoreElements()) {
            String str = st.nextToken();

            int size = ev.getEvContainer().size();
            for (int i = 0; i < size; i++) {
                Predicate_old p = (Predicate_old) ev.getEvContainer().get(i);
                String value = (String) p.getValue();
                if (value.contains(str)) {
                    ret = ret&&true;
                } else {
                    ret = ret&&false;

                }
            }

        }
        return ret;
    }
//domanda: il value dell'evento deve essere una stringa, si può modellare meglio?
    //visto che nel content based è un valore unitario che può essere altro (int float etc...)
    //soluzione possibile:altro campo keywords(o header) contente le keyword che caratterizzano l'evento
    public boolean filterSubscription(EventUtils_old ev, TopicSubscription sub){
        boolean ret = true;

        StringTokenizer st = new StringTokenizer(sub.getKeywords());

        while (st.hasMoreElements()) {
            String str = st.nextToken();

            int size = ev.getEvContainer().size();
            for (int i = 0; i < size; i++) {
                Predicate_old p = (Predicate_old) ev.getEvContainer().get(i);
                String value = (String) p.getValue();
                if (value.contains(str)) {
                    ret = ret&&true;
                } else {
                    ret = ret&&false;

                }
            }

        }
        return ret;
    }

}
